function [ErrTL,ErrLogitPCHM,diffvarLL1,diffvarU,covar]=combinederr(tau,lambda,row,column,y,id,distr)

% Logit PCHM

levR{1}=1/3*ones(1,3);
levC{1}=1/3*ones(1,3);

n=length(row);
all=zeros(n,3);
t=tau;
l=lambda;
for g=1:n
    ExpPayoffR=levR{1}*row{g}';
    levR{2}=zeros(1,3);
    for j=1:3
        levR{2}(j)=exp(l*ExpPayoffR(j))/(exp(l*ExpPayoffR(1))+exp(l*ExpPayoffR(2))+exp(l*ExpPayoffR(3)));
    end
    ExpPayoffC=levC{1}*column{g};
    levC{2}=zeros(1,3);
    for j=1:3
        levC{2}(j)=exp(l*ExpPayoffC(j))/(exp(l*ExpPayoffC(1))+exp(l*ExpPayoffC(2))+exp(l*ExpPayoffC(3)));
    end
    
    for k=2:7
        w=poisspdf(0:k-1,t)/sum(poisspdf(0:k-1,t));
        
        mixR=w(1).*levC{1};
        for j=2:k
            mixR=mixR+w(j)*levC{j};
        end
        
        ExpPayoffR=mixR*row{g}';
        levR{k+1}=zeros(1,3);
        for j=1:3
            levR{k+1}(j)=exp(l*ExpPayoffR(j))/(exp(l*ExpPayoffR(1))+exp(l*ExpPayoffR(2))+exp(l*ExpPayoffR(3)));
        end
        
        mixC=w(1).*levR{1};
        for j=2:k
            mixC=mixC+w(j)*levR{j};
        end
        
        ExpPayoffC=mixC*column{g};
        levC{k+1}=zeros(1,3);
        for j=1:3
            levC{k+1}(j)=exp(l*ExpPayoffC(j))/(exp(l*ExpPayoffC(1))+exp(l*ExpPayoffC(2))+exp(l*ExpPayoffC(3)));
        end
    end
    all(g,:)=poisspdf(0,t)*levR{1};
    for k=1:7
        all(g,:)=all(g,:)+poisspdf(k,t)*levR{k+1};
    end
end

m=length(y);

errLogitPCHM=zeros(m,1);
for i=1:m
    errLogitPCHM(i)=-log(all(id(i),str2double(y(i))));
end
ErrLogitPCHM=mean(errLogitPCHM);

% Table Lookup

predTL=zeros(m,3);
for i=1:m
    predTL(i,:)=distr(id(i),:);
end

errTL=zeros(m,1);
for i=1:m
    z=predTL(i,str2double(y(i)));
    if z==0
        errTL(i)=-log(0.001);
    else
        errTL(i)=-log(z);
    end
end
ErrTL=mean(errTL);

% Sample Variance for Difference in Test Errors

diffvarLL1 = var(errTL - errLogitPCHM);
diffvarU = var( -log(1/3) - errTL);
covar = cov((errTL - errLogitPCHM), (errTL + log(1/3)));
covar=covar(1,2);
